package com.gxuwz.stats.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gxuwz.stats.entity.IntellectualProperty;
import com.gxuwz.stats.entity.User;
import com.gxuwz.stats.mapper.IntellectualPropertyMapper;
import com.gxuwz.stats.service.IntellectualPropertyService;
import com.gxuwz.stats.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class IntellectualPropertyServiceImpl extends ServiceImpl<IntellectualPropertyMapper, IntellectualProperty>
        implements IntellectualPropertyService {

    @Autowired
    private UserService userService;

    /**
     * 获取带有用户名的知识产权列表（分页）
     * 在获取到知识产权记录后，根据用户ID查询用户信息并设置到知识产权实体的username属性中
     * @param page         分页参数对象（包含页码、页大小等信息）
     * @param queryWrapper 查询条件构造器
     * @return 包含分页结果的分页对象（数据列表、总记录数等，且记录中包含用户名信息）
     */
    public IPage<IntellectualProperty> getIntellectualPropertyList(IPage<IntellectualProperty> page, QueryWrapper<IntellectualProperty> queryWrapper) {
        IPage<IntellectualProperty> resultPage = this.page(page, queryWrapper);
        for (IntellectualProperty intellectualProperty : resultPage.getRecords()) {
            Integer userId = intellectualProperty.getUserId();
            if (userId != null) {
                User user = userService.getById(userId);
                if (user != null) {
                    intellectualProperty.setUsername(user.getUsername());
                }
            }
        }
        return resultPage;
    }

    /**
     * 分页查询知识产权数据
     * @param page         分页参数对象（包含页码、页大小等信息）
     * @param queryWrapper 查询条件构造器
     * @return 包含分页结果的分页对象（数据列表、总记录数等）
     */
    @Override
    public IPage<IntellectualProperty> page(Page<IntellectualProperty> page, QueryWrapper<IntellectualProperty> queryWrapper) {
        return baseMapper.selectPage(page, queryWrapper);
    }

    /**
     * 查询知识产权列表
     * @param queryWrapper 查询条件构造器
     * @return 符合条件的知识产权列表
     */
    @Override
    public List<IntellectualProperty> list(QueryWrapper<IntellectualProperty> queryWrapper) {
        return baseMapper.selectList(queryWrapper);
    }

    /**
     * 新增单个知识产权记录
     * 这里调用了IntellectualPropertyMapper中自定义的insertWithUserId方法来插入数据
     * @param intellectualProperty 知识产权实体对象
     * @return 是否操作成功（插入行数 > 0）
     */
    @Override
    public boolean save(IntellectualProperty intellectualProperty) {
        // 确保设置了 intellectualAchievementName 的值
        if (intellectualProperty.getIntellectualAchievementName() == null) {
            // 可以根据业务需求设置默认值
            intellectualProperty.setIntellectualAchievementName("默认成果名称");
        }
        return baseMapper.insertWithUserId(intellectualProperty) > 0;
    }



    /**
     * 根据ID删除单个知识产权记录
     * @param id 知识产权记录ID
     * @return 是否操作成功（删除行数 > 0）
     */
    @Override
    public boolean removeById(Long id) {
        return baseMapper.deleteById(id) > 0;
    }

    /**
     * 根据ID列表批量删除知识产权记录
     * @param ids 知识产权记录ID列表
     * @return 是否操作成功（删除行数 > 0）
     */
    @Override
    public boolean removeByIds(List<Long> ids) {
        QueryWrapper<IntellectualProperty> queryWrapper = new QueryWrapper<>();
        queryWrapper.in("intellectual_id", ids);
        return baseMapper.delete(queryWrapper) > 0;
    }

    /**
     * 根据ID查询单个知识产权记录
     * @param id 知识产权记录ID
     * @return 对应的知识产权实体对象
     */
    @Override
    public IntellectualProperty getById(Long id) {
        return baseMapper.selectById(id);
    }

    /**
     * 根据ID更新知识产权记录
     * @param intellectualProperty 包含更新数据的实体对象（需设置ID）
     * @return 是否操作成功（更新行数 > 0）
     */
    @Override
    public boolean updateById(IntellectualProperty intellectualProperty) {
        return baseMapper.updateById(intellectualProperty) > 0;
    }
}


